<script language="javascript" type="text/javascript">

var especialidadABuscar;
var permitirCruces;
var duracion;
var diaSeleccionado;
var editable;//esta vaina indica si me deja pintar cualquier celda, creo que nunca lo usaremos XD
var dragging;//interno, solo util para editable = true
var actividades;
var turnos;
var selectedHeader;//dia seleccionado
var selectedCell;//del rango seleccionado, q hora esta seleccionada para ver su detalle
var horario;//arreglo de arreglo de rangos, el primer nivel son los dias y el segundo nivel son los rangos de hora asignados para ese dia
var headerCells;
var lunes;

var cellSelectStyle = 'btn-success';
var cellSelect2Style = 'btn-inverse';

var body;
var cbActividades;
var cbTurnos;
var btnAddTurno;
var btnRemoveTurno;
var btnRepetir;
var cbRepeticiones;
var datePickerHorario;
var personaDiv;
var detalleHoraDiv;

function msg(tipo, titulo, msg){
    $('#msgDiv').html("\
        <div class='alert alert-"+tipo+"'>\
            <button type='button' class='close' data-dismiss='alert'>×</button><strong>"+
            titulo+"</strong> "+msg+
        "</div>");
}

function consultarEspecialidad(especialidadConsultada, duracionConsultada, permitirCrucesBool){
    especialidadABuscar = especialidadConsultada;
    duracion = duracionConsultada;
    permitirCruces = permitirCrucesBool;
    cargarHorario();
}

function mostrarDetalle(){
    var iDia = selectedCell.attr("iDia");
    var hora = selectedCell.attr("iHora");

    detalleHoraDiv.html("");

    var str = "";
    str += latisoft_openStylableTable("Hora", "Reservar");
    for (var i=0; i<60/5; i++){
        var ceros;
        if ((i*5).toString().length == 1){
            ceros = "0";
        }else{
            ceros = "";
        }
        var mins = ceros+(i*5);

        var disponibles = horario.mins5[iDia*24*60/5 + hora*60/5+i].empleados;
        if (disponibles.length > 0){
            var strReservar = "";
            for (var j in disponibles){
                var doc = disponibles[j];
                var fechaSel = ""+horario.dias[iDia].fechaSql+" "+hora+":"+mins+":00";
                var idEmpleado = doc.id;
                var nombreCompletoEmpleado = doc.nombres+" "+doc.apellidoPaterno;
                var strStyle = "style='cursor: pointer;'";
                strReservar += "<a "+strStyle+" onclick=\"elegirFechaYPersonal('"+fechaSel+"', "+idEmpleado+",\'"+nombreCompletoEmpleado+"\');\">"+doc.nombres+" "+doc.apellidoPaterno+"</a>"+"<br/>";
            }
            str += latisoft_tableRowStyleFirst('',""+hora+":"+(mins), strReservar);
        }else{
            str += latisoft_tableRowStyleFirst('btn-danger',""+hora+":"+(mins), "-");
        }

    }
    str += latisoft_closeTable();

    detalleHoraDiv.append(str);

}

function calendarCell_onMouseDown(event){
    var cell = $(event.currentTarget);

    var iDisp = cell.attr("iDisp");
    var iDia = cell.attr("iDia");
    var iHora = cell.attr("iHora");
    if (iDisp == "true"){

        if (selectedCell != null){
            visualSelectCell(selectedCell);
        }

        if (selectedCell != cell){
            visualSelectCell2(cell);
            selectedCell = cell;
            mostrarDetalle();
        }else{
            selectedCell = null;
        }
    }

    if (!editable) return;
    dragging = true;
    invertCell(cell);
}

function getConsistentRowf(row0, rowf){
    var nRow0 = Number(row0);
    var nRowf = Number(rowf);
    
    if (nRowf < nRow0){
        nRowf += 24;
    }
    return nRowf;
}

function deselectRange(range){
    var iDia = range.iDia;
    for (var i=Number(range.hora0); i<getConsistentRowf(range.hora0, range.hora1); i++){
        var rangeCell = getCalendarCell(iDia, i);
        visualDeselectCell(rangeCell);
    }
}

function selectRange(range){
    var iDia = range.iDia;
    for (var i=Number(range.hora0); i<getConsistentRowf(range.hora0, range.hora1); i++){
        var rangeCell = getCalendarCell(iDia, i);
        visualSelectCell(rangeCell);
    }
}


function visualSelectCell2(cell){
    cell.removeClass('is-hidden');
    cell.removeClass('is-visible');
    cell.removeClass(cellSelectStyle);
    cell.addClass(cellSelect2Style);
}

function visualDeselectCell(cell){
    cell.addClass('is-visible');
    cell.removeClass(cellSelectStyle);
    cell.removeClass(cellSelect2Style);
}

function visualSelectCell(cell){
    cell.removeClass('is-hidden');
    cell.removeClass('is-visible');
    cell.removeClass(cellSelect2Style);
    cell.addClass(cellSelectStyle);
}

function calendarCell_onMouseEnter(event){
    if (!editable) return;
    if (!dragging) return;
    var cell = $(event.currentTarget);
    invertCell(cell);
}

function invertCell(cell){
    if (cell.hasClass('is-hidden')){
        setVisible(cell);
    }else{
        setHidden(cell);
    }
}

function setHidden(cell){
    cell.removeClass('is-visible');
    cell.addClass('is-hidden');
}

function setVisible(cell){
    cell.addClass('is-visible');
    cell.removeClass('is-hidden');
}

function headerCell_onMouseDown(event){
    var cell = $(event.currentTarget);
    setInactiveHeader(selectedHeader);
    setActiveHeader(cell);
    selectedHeader = cell;
}

function setActiveHeader(cell){
    cell.addClass('btn-primary');
}

function setInactiveHeader(cell){
    cell.removeClass('btn-primary');
}

function clearCells(){
    for (var fil=0; fil<48; fil++){
        for (var col=0; col<7; col++){
            var cell = $("#cell-"+fil+"-"+col);
            cell.attr("iDisp", false);
            setHidden(cell);
            visualDeselectCell(cell);
            cell.html("");
        }
    }
}

function drawTurno(dia, row0, rowf, actividades, iRange){
    //se llama draw turno pero en realidad dibuja una fraccion
    //o sea, un turno en un dia, o un rango
    for (var i=Number(row0); i<getConsistentRowf(row0, rowf); i++){
        var cell = getCalendarCell(dia, i);
        cell.attr("iRange", iRange);
        cell.attr("iRangeDia", dia);
        setVisible(cell);

        var strActividades = actividades[0].nombre;
        if (actividades.length > 1){
            strActividades += " ("+(actividades.length-1)+"+)";
        }
        cell.html(strActividades);
    }
}

function updateActividades(){
    cbActividades.html("");
    cbActividades.append("<option value='-1'></option>");
    for (var i in actividades){
        cbActividades.append("<option value='"+i+"'>"+actividades[i].nombre+"</option>");
    }

    cbActividades.trigger("liszt:updated");
}

function updateHorario(){
    clearCells();
    for (var i in horario.dias){
        //para cada dia

        var cell = $("#cell-th-"+i);
        cell.attr("i", i);
        cell.html(horario.dias[i].nombre+" "+horario.dias[i].fechaHtml);

        cell.mousedown(headerCell_onMouseDown);

        //revisar para cada hora
        //si existe al menos un hueco de 5 mins
        //donde meterse
        var dia = horario.dias[i];
        for (var j=0; j<24; j++){
            var calCell = getCalendarCell(i, j);
            var hay = false;
            for (var k=0; k<60/5; k++){
                if (horario.mins5[i*24*60/5 + j*60/5 + k].empleados.length != 0){
                    hay = true;
                }
            }
            if (hay){
                visualSelectCell(calCell);
                calCell.attr("iDisp", true);
            }
        }
        
    }
}

function iToHora(i){
    var ceros;
    if (i.length == 1){
        ceros = "0";
    }else{
        ceros = "";
    }
    return ceros+i+":00";
}

function cargarHorario(){
    if (diaSeleccionado == null) diaSeleccionado = new Date();
    var strDia = diaSeleccionado.getFullYear()+"-"+(Number(diaSeleccionado.getMonth())+1)+"-"+diaSeleccionado.getDate();
    //alert(especialidad+" "+duracion+" "+strDia);
    msg("info", "Aviso", "Recargando horario...");

    $.ajax(
    {
        url: <?php echo "'".base_url()."horario/wsGetDisponibilidad'"; ?>,
        type: 'GET',
        dataType: 'json',
        data:{idEspecialidad: especialidadABuscar, duracionMins:duracion, lunes:strDia, permitirCruces:permitirCruces},
        cache: false,
        beforeSend: function(){
        },
        success: function(data){
            horario = data;
            updateHorario();
            lunes = Number(horario.lunes)*1000;
            msg("success", "Aviso", "Se ha recargado el horario.");
        },
        error: function(xhr, textStatus, errorThrown) {
            msg("error", "Error", "Ha ocurrido un error al cargar el horario");
        }
    });
}

function onChangeDate(event){
    diaSeleccionado = event.date;
    var iDia = diaSeleccionado.getDay();
    
    setInactiveHeader(selectedHeader);

    var iDia2 = iDia -1;
    if (iDia2 == -1) iDia2 = 6;    
    selectedHeader = headerCells[iDia2];
    setActiveHeader(selectedHeader);

    //recargar horario solo cuando hay cambio de semana
    sigLunes = Number(lunes) + 7*24*60*60*1000;
    var msecs = diaSeleccionado.getTime();
    if (msecs < lunes ||
        msecs > sigLunes){
        cargarHorario();
    }

}

function getCalendarCell(dia, hora){
    var horaP = hora;
    if (hora >= 24){
        horaP -= 24;
        dia ++;
    }
    return $("#cell-"+horaP+"-"+dia);
}

function iniCalendarCells(){
    for (var fil=0; fil<24; fil++){
        for (var col=0; col<7; col++){
            var cell = getCalendarCell(col, fil);
            cell.attr("iRange", -1);
            cell.attr("iRangeDia", -1);
            cell.attr("iDia", col);
            cell.attr("iHora", fil);
            cell.mousedown(calendarCell_onMouseDown);
            cell.mouseenter(calendarCell_onMouseEnter);
        }
    }
}

function iniHeaderCells(iSelected){
    headerCells = new Array();

    for (var i=0; i<7; i++){
        var cell = $("#cell-th-"+i);
        cell.attr("i", i);
        cell.mousedown(headerCell_onMouseDown);
        headerCells.push(cell);
        if (i == iSelected){
            selectedHeader = cell;
            setActiveHeader(cell);
        }
    }

}

function storeElements(){
    body = $("body");
    cbTurnos = $("#cbTurnos");
    cbActividades = $("#cbActividades");
    btnAddTurno = $("#btnAddTurno");
    btnRemoveTurno = $("#btnRemoveTurno");
    datePickerHorario = $("#datePickerHorario");
    personaDiv = $("#personaDiv");
    btnRepetir = $("#btnRepetir");
    cbRepeticiones = $("#cbRepeticiones");
    detalleHoraDiv = $("#detalleHoraDiv");
}

function onReady(){
    storeElements();
    dragging = false;
    editable = false;
    diaActual = new Date();
    diaSeleccionado = null;

    var iDia = diaActual.getDay();
    
    iniHeaderCells(iDia);
    iniCalendarCells();

    body.mouseup(function(){
        dragging = false;
    });
    datePickerHorario.datepicker().on('changeDate', onChangeDate);

    selectedCell = null;
    //especialidadABuscar = null;

}

</script>